              <div align="right">
${TARGET="offline"}                <a href="${LDAP_SDK_HOME_URL}" style="font-size: 85%">LDAP SDK Home Page</a>
                <br>
                <a href="${BASE}index.${EXTENSION}" style="font-size: 85%">Product Information</a>
                <br>
                <a href="index.${EXTENSION}" style="font-size: 85%">Getting Started with the LDAP SDK</a>
              </div>

              <h2>Command Line Argument Processing</h2>

              <p>
                The <tt>com.unboundid.util.args</tt> package contains a set of classes that may be
                used for processing command line arguments provided to a program, as well as
                generating program usage information based on the arguments that it accepts.
              </p>

              <p></p>
              <h3>The Argument Parser</h3>

              <p>
                The <tt>ArgumentParser</tt> class is used to hold all of the arguments that are
                defined, as well as parsing the provided set of arguments and generating usage
                information.
              </p>

              <p>
                When an argument parser is created, it must be created with a name and general
                description for the command.  It may also specify a maximum number of unnamed
                trailing arguments and a placeholder string for the set of trailing arguments.
                Named arguments may be added to the argument parser using the <tt>addArgument</tt>
                method.  Once all of the arguments have been registered, then argument information
                may be parsed using the <tt>parse(String[] args)</tt> method.  Alternately, usage
                information may be obtained using one of the <tt>getUsage</tt> or
                <tt>getUsageString</tt> methods.
              </p>

              <p>
                The argument parser also provides support for dependent argument sets, exclusive
                argument sets, and required argument sets.  A dependent argument set defines a set
                of one or more arguments that must be provided if a given target attribute is
                given.  An exclusive argument set defines a collection of arguments that may not be
                used in conjunction with each other, so at most one of the arguments in an
                exclusive argument set may be provided.  A required argument set defines a
                collection of arguments in which at least one of the specified arguments must be
                provided.  If the same set of arguments is registered as both an exclusive argument
                set and a required argument set, then exactly one of those arguments must be
                provided.
              </p>

              <p></p>
              <h3>Generic Named Arguments</h3>

              <p>
                All arguments have the provided properties:
              </p>

              <ul>
                <li>
                  Zero or more short identifiers, each of which consists of a single character.
                  <br><br>
                </li>

                <li>
                  Zero or more long identifiers, each of which consists of a string.
                  <br><br>
                </li>

                <li>
                  A human-readable description that explains the purpose of the argument.
                  <br><br>
                </li>

                <li>
                  A flag that indicates whether the argument is required to be provided.
                  <br><br>
                </li>

                <li>
                  A value that specifies the maximum number of times (if any) that the argument may
                  be provided.
                  <br><br>
                </li>

                <li>
                  A placeholder string that suggests the type of value required for the argument
                  (if it takes a value).
                  <br><br>
                </li>

                <li>
                  A flag that indicates whether the argument should be excluded from usage
                  information.
                  <br><br>
                </li>
              </ul>

              <p>
                An argument may be specified using a single dash followed by any of its short
                identifier characters (e.g., "<tt>-H</tt>") or two dashes followed by any of its
                long identifier strings (e.g., "<tt>--help</tt>").  If an argument takes a value,
                then  it may be provided in one of the following ways:
              </p>

              <ul>
                <li>
                  Separated from either the short identifier or long identifier by one or more
                  spaces (e.g., "<tt>-h server.example.com</tt>" or
                  "<tt>--host server.example.com</tt>").
                  <br><br>
                </li>

                <li>
                  Immediately following the short identifier without any spaces (e.g.,
                  "<tt>-hserver.example.com</tt>").
                  <br><br>
                </li>

                <li>
                  Separated from the long identifier using a single equal sign (e.g.,
                  "<tt>--host=server.example.com</tt>").
                  <br><br>
                </li>
              </ul>

              <p>
                If there are multiple arguments which have short identifiers and do not take values,
                then they may be specified using a single dash followed by the short identifiers for
                each of those arguments with no spaces (e.g., for arguments with short identifiers
                of "<tt>-a</tt>", "<tt>-b</tt>", and "<tt>-c</tt>", then they can be specified as
                "<tt>-abc</tt>").
              </p>

              <p>
                Generic arguments are abstract and therefore cannot be directly instantiated.
                Instead, it is necessary to create an instance of an argument subclass.  Those
                specific types of arguments are described below.
              </p>

              <p></p>
              <h3>Boolean Arguments</h3>

              <p>
                Boolean arguments are those which represent a Boolean condition.  Boolean arguments
                do not have values, but rather the condition is indicated based on whether or not
                that argument is provided.  For example, if a Boolean argument is defined with a
                short identifier of "<tt>-v</tt>" and is used to indicate that the command should
                operate in verbose mode, then if the "<tt>-v</tt>" argument is not provided then it
                would be interpreted as if the command should not operate in verbose mode, whereas
                it should use verbose mode if the "<tt>-v</tt>" argument is provided.  The
                <tt>isPresent()</tt> method may be used to determine whether a Boolean argument was
                provided.
              </p>

              <p>
                In addition, it may be desirable to allow Boolean argument to be provided multiple
                times (by calling the <tt>setMaxOccurrences</tt> method) if the effect may be
                enhanced by providing the value multiple times.  For example, if "<tt>-v</tt>"
                enables verbose mode then something like "<tt>-v&nbsp;-v&nbsp;-v</tt>" could
                increase the level of verbosity.
              </p>

              <p></p>
              <h3>Integer Arguments</h3>

              <p>
                Integer arguments are intended to hold integer values.  Integer arguments are
                required to take values which can be parsed as integers.  It is also possible to
                define lower and upper bounds for the values that are allowed, so that any value
                which is below the lower bound or above the upper bound will be rejected.
              </p>

              <p></p>
              <h3>String Arguments</h3>

              <p>
                String arguments are intended to hold text-based values.  String arguments are
                required to take values.  It is also possible to provide a set of allowed values,
                and if that is done then values which are not contained in that set of allowed
                values will be rejected.
              </p>

              <p></p>
              <h3>DN Arguments</h3>

              <p>
                DN arguments are intended to hold values that are distinguished names.  DN arguments
                are required to take values, and it must be possible to parse them as valid DNs.
              </p>

              <p></p>
              <h3>Filter Arguments</h3>

              <p>
                Filter arguments are intended to hold values that are string representations of LDAP
                search filters.  Filter arguments are required to take values, and it must be
                possible to parse them as valid search filters.
              </p>

              <p></p>
              <h3>File Arguments</h3>

              <p>
                File arguments are intended to refer to files or directories on the local
                filesystem.  It is possible to specify whether values must be files that exist, or
                at least whose parent directories exist.  It is also possible to specify whether the
                target file must be a regular file or a directory.  Finally, there are methods that
                can be used to retrieve the contents of the specified file (either as strings that
                comprise the lines of the file or the bytes that comprise the raw file data).
              </p>
